package data_structure;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class leetcode_0107 {
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        LinkedList<TreeNode> queue=new LinkedList<>();
        LinkedList<Integer> num=new LinkedList<>();
        List<List<Integer>> list=new LinkedList<>();
        if(root==null) return list;
        queue.add(root);
        num.add(0);
        int current=0;
        LinkedList<Integer> tem=new LinkedList<>();
        while(!queue.isEmpty()){
            TreeNode node=queue.getFirst();
            queue.removeFirst();
            int number=num.getFirst();
            num.removeFirst();
            if(node.left!=null) {
                queue.add(node.left);
                num.add(number + 1);
            }
            if(node.right!=null){
                queue.add(node.right);
                num.add(number + 1);
            }
            if(number==current){
                tem.add(node.val);
            }
            else{
                list.add(new LinkedList<>(tem));
                tem.clear();
                current++;
                tem.add(node.val);
            }
        }
        list.add(new LinkedList<>(tem));
        current++;
        List<List<Integer>> list2=new LinkedList<>();
        for(int i=current-1;i>=0;--i){
            list2.add(list.get(i));
        }
        return list2;
    }
}
